#ifndef GRPC_SERVER_BASE_H
#define GRPC_SERVER_BASE_H

#include "device_communication.grpc.pb.h"
#include <grpcpp/grpcpp.h>
#include <memory>
#include <mutex>
#include <string>
#include <thread>

using device_communication::DeviceInfoRequest;
using device_communication::DeviceInfoResponse;
using device_communication::DeviceService;
using device_communication::PingRequest;
using device_communication::PongResponse;

using GRPCServer = grpc::Server;
using GRPCServerContext = grpc::ServerContext;
using GRPCStatus = grpc::Status;

// 通用服务端基类（线程安全）
class ServerBase : public DeviceService::Service {
public:
  ServerBase();
  virtual ~ServerBase();

  // 启动服务端（单独线程运行）
  // 参数：端口号（默认50051）
  bool StartServer(const std::string &port = "50051");

  // 停止服务端
  void StopServer();

  // 检查服务端状态
  bool IsServerRunning() const;

protected:
  virtual void GetPlatformInfo(std::string &platform, std::string &deviceModel,
                               std::string &systemVersion) = 0;
  // gRPC服务实现：Ping接口
  GRPCStatus Ping(GRPCServerContext *context, const PingRequest *request,
                  PongResponse *response) override;

  // gRPC服务实现：获取设备信息接口
  GRPCStatus GetDeviceInfo(GRPCServerContext *context,
                           const DeviceInfoRequest *request,
                           DeviceInfoResponse *response) override;

private:
  // 服务端线程函数
  void RunServer(const std::string &address);

  std::unique_ptr<GRPCServer> server_; // gRPC服务端实例
  std::thread serverThread_;           // 服务端运行线程
  mutable std::mutex serverMutex_;     // 线程安全锁
  bool isRunning_ = false;             // 服务运行状态
  std::string serverId_;               // 服务端唯一ID（自动生成）
};

#endif // GRPC_SERVER_BASE_H
